package com.atguigu.principle.demeter;

import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * 迪米特法则
 * 有问题的代码
 */
public class Demeter1 {
    public static void main(String[] args) {

    }
}

/**
 * 学校总部员工
 */
@Data
class Employee {
    private String id;
}

/**
 * 学院员工类
 */
@Data
class CollegeEmployee {
    private String id;
}

/**
 * 管理学院的员工类
 */
@Data
class CollegeManager {
    /**
     * 返回学院的所有员工,
     *
     * @return 学院所有员工的集合
     */
    public List<CollegeEmployee> getAllEmployee() {
        ArrayList<CollegeEmployee> list = new ArrayList<>();
        // 模拟10个学院员工
        for (int i = 0; i < 10; i++) {
            CollegeEmployee collegeEmployee = new CollegeEmployee();
            collegeEmployee.setId("学院员工id= " + i);
            list.add(collegeEmployee);
        }
        return list;
    }
}

/**
 * 管理学校员工的类
 * 分析出哪些类不是SchoolManager的直接朋友
 * 1.CollegeEmployee不是直接朋友
 */
class SchoolManager {
    /**
     * 返回学校总部所有员工,
     *
     * @return 学校总部所有员工的集合
     */
    public List<Employee> getAllEmployee() {
        ArrayList<Employee> list = new ArrayList<>();
        // 模拟10个学院员工
        for (int i = 0; i < 10; i++) {
            Employee employee = new Employee();
            employee.setId("学校总部员工id= " + i);
            list.add(employee);
        }
        return list;
    }

    public void printAllEmployee(CollegeManager collegeManager) {
        // 这里的collegeManager不是SchoolManager的直接朋友
        // CollegeEmployee是以局部变量方式出现在SchoolManager
        List<CollegeEmployee> list1 = collegeManager.getAllEmployee();
        System.out.println("===============学院员工============");
        for (CollegeEmployee collegeEmployee : list1) {
            System.out.println(collegeEmployee);
        }

        List<Employee> list2 = this.getAllEmployee();
        System.out.println("===============学校总部员工============");
        for (Employee employee : list2) {
            System.out.println(employee);
        }
    }
}
